import { IPSModelObject } from '../../ipsmodel-object';
import { IPSAppDataEntity } from '../../app/dataentity/ipsapp-data-entity';
import { IPSAppView } from '../../app/view/ipsapp-view';
import { IPSControlItem } from '../ipscontrol-item';
import { IPSControlMDataContainer } from '../ipscontrol-mdata-container';
import { IPSControlObjectNavigatable } from '../ipscontrol-object-navigatable';
import { IPSControlXDataContainer } from '../ipscontrol-xdata-container';
import { IPSDEContextMenu } from '../toolbar/ipsdecontext-menu';
import { IPSDETreeNodeDataItem } from './ipsdetree-node-data-item';
import { IPSDETreeNodeRV } from './ipsdetree-node-rv';
import { IPSDERBase } from '../../dataentity/der/ipsderbase';
import { IPSLanguageRes } from '../../res/ipslanguage-res';
import { IPSSysCss } from '../../res/ipssys-css';
import { IPSSysImage } from '../../res/ipssys-image';
import { IPSSysPFPlugin } from '../../res/ipssys-pfplugin';

/**
 *
 * 子接口类型识别属性[treeNodeType]
 * @export
 * @interface IPSDETreeNode
 */
export interface IPSDETreeNode extends IPSModelObject, IPSControlItem, IPSControlXDataContainer, IPSControlMDataContainer, IPSControlObjectNavigatable {
  /**
   * 计数器标识
   * @type {string}
   */
  counterId: string;

  /**
   * 计数器模式
   * @description 值模式 [树节点计数器类型] {0：默认、 1：0 值时隐藏 }
   * @type {( number | 0 | 1)}
   */
  counterMode: number | 0 | 1;

  /**
   * 代码模型对象
   * @type {string}
   */
  modelObj: string;

  /**
   * 名称语言资源
   *
   * @type {IPSLanguageRes}
   */
  getNamePSLanguageRes(): IPSLanguageRes | null;

  /**
   * 名称语言资源
   *
   * @type {IPSLanguageRes}
   */
  get namePSLanguageRes(): IPSLanguageRes | null;

  /**
   * 名称语言资源（必须存在）
   *
   * @type {IPSLanguageRes}
   */
  getNamePSLanguageResMust(): IPSLanguageRes;

  /**
   * 导航视图过滤项
   * @type {string}
   */
  navFilter: string;

  /**
   * 导航视图对象
   *
   * @type {IPSAppView}
   */
  getNavPSAppView(): IPSAppView | null;

  /**
   * 导航视图对象
   *
   * @type {IPSAppView}
   */
  get navPSAppView(): IPSAppView | null;

  /**
   * 导航视图对象（必须存在）
   *
   * @type {IPSAppView}
   */
  getNavPSAppViewMust(): IPSAppView;

  /**
   * 导航关系
   *
   * @type {IPSDERBase}
   */
  getNavPSDER(): IPSDERBase | null;

  /**
   * 导航关系
   *
   * @type {IPSDERBase}
   */
  get navPSDER(): IPSDERBase | null;

  /**
   * 导航关系（必须存在）
   *
   * @type {IPSDERBase}
   */
  getNavPSDERMust(): IPSDERBase;

  /**
   * 节点标识
   * @type {string}
   */
  nodeType: string;

  /**
   * 应用实体对象
   *
   * @type {IPSAppDataEntity}
   */
  getPSAppDataEntity(): IPSAppDataEntity | null;

  /**
   * 应用实体对象
   *
   * @type {IPSAppDataEntity}
   */
  get psAppDataEntity(): IPSAppDataEntity | null;

  /**
   * 应用实体对象（必须存在）
   *
   * @type {IPSAppDataEntity}
   */
  getPSAppDataEntityMust(): IPSAppDataEntity;

  /**
   * 上下文菜单对象
   *
   * @type {IPSDEContextMenu}
   */
  getPSDEContextMenu(): IPSDEContextMenu | null;

  /**
   * 上下文菜单对象
   *
   * @type {IPSDEContextMenu}
   */
  get psDEContextMenu(): IPSDEContextMenu | null;

  /**
   * 上下文菜单对象（必须存在）
   *
   * @type {IPSDEContextMenu}
   */
  getPSDEContextMenuMust(): IPSDEContextMenu;

  /**
   * 树节点数据项集合
   *
   * @type {IPSDETreeNodeDataItem[]}
   */
  getPSDETreeNodeDataItems(): IPSDETreeNodeDataItem[] | null;

  /**
   * 树节点数据项集合
   *
   * @type {IPSDETreeNodeDataItem[]}
   */
  get psDETreeNodeDataItems(): IPSDETreeNodeDataItem[] | null;

  findPSDETreeNodeDataItem(objKey: any): IPSDETreeNodeDataItem | null;

  /**
   * 树节点引用视图集合
   *
   * @type {IPSDETreeNodeRV[]}
   */
  getPSDETreeNodeRVs(): IPSDETreeNodeRV[] | null;

  /**
   * 树节点引用视图集合
   *
   * @type {IPSDETreeNodeRV[]}
   */
  get psDETreeNodeRVs(): IPSDETreeNodeRV[] | null;

  findPSDETreeNodeRV(objKey: any): IPSDETreeNodeRV | null;

  /**
   * 节点界面样式表
   *
   * @type {IPSSysCss}
   */
  getPSSysCss(): IPSSysCss | null;

  /**
   * 节点界面样式表
   *
   * @type {IPSSysCss}
   */
  get psSysCss(): IPSSysCss | null;

  /**
   * 节点界面样式表（必须存在）
   *
   * @type {IPSSysCss}
   */
  getPSSysCssMust(): IPSSysCss;

  /**
   * 节点图标对象
   *
   * @type {IPSSysImage}
   */
  getPSSysImage(): IPSSysImage | null;

  /**
   * 节点图标对象
   *
   * @type {IPSSysImage}
   */
  get psSysImage(): IPSSysImage | null;

  /**
   * 节点图标对象（必须存在）
   *
   * @type {IPSSysImage}
   */
  getPSSysImageMust(): IPSSysImage;

  /**
   * 前端绘制插件
   *
   * @type {IPSSysPFPlugin}
   */
  getPSSysPFPlugin(): IPSSysPFPlugin | null;

  /**
   * 前端绘制插件
   *
   * @type {IPSSysPFPlugin}
   */
  get psSysPFPlugin(): IPSSysPFPlugin | null;

  /**
   * 前端绘制插件（必须存在）
   *
   * @type {IPSSysPFPlugin}
   */
  getPSSysPFPluginMust(): IPSSysPFPlugin;

  /**
   * 节点类型
   * @description 值模式 [云树视图节点类型] {STATIC：静态、 DE：动态（实体）、 CODELIST：动态（代码表） }
   * @type {( string | 'STATIC' | 'DE' | 'CODELIST')}
   */
  treeNodeType: string | 'STATIC' | 'DE' | 'CODELIST';

  /**
   * 是否有子节点
   * @type {boolean}
   */
  get hasPSDETreeNodeRSs(): boolean | null;

  /**
   * 是否有子节点
   * @type {boolean}
   */
  getHasPSDETreeNodeRSs(): boolean | null;

  /**
   * 允许拖到节点
   * @type {boolean}
   * @default false
   */
  allowDrag: boolean;

  /**
   * 允许拖入节点
   * @type {boolean}
   * @default false
   */
  allowDrop: boolean;

  /**
   * 允许编辑节点文本
   * @type {boolean}
   * @default false
   */
  allowEditText: boolean;

  /**
   * 允许节点排序
   * @type {boolean}
   * @default false
   */
  allowOrder: boolean;

  /**
   * 附加父节点标识
   * @type {boolean}
   */
  appendPNodeId: boolean;

  /**
   * 禁止选择
   * @type {boolean}
   */
  disableSelect: boolean;

  /**
   * 支持选中
   * @type {boolean}
   */
  enableCheck: boolean;

  /**
   * 支持快速搜索
   * @type {boolean}
   */
  enableQuickSearch: boolean;

  /**
   * 仅展开首节点
   * @type {boolean}
   */
  expandFirstOnly: boolean;

  /**
   * 默认展开
   * @type {boolean}
   */
  expanded: boolean;

  /**
   * 根节点
   * @type {boolean}
   */
  rootNode: boolean;

  /**
   * 仅选择首节点
   * @type {boolean}
   */
  selectFirstOnly: boolean;

  /**
   * 默认选择
   * @type {boolean}
   */
  selected: boolean;
}
